package com.chatdating.utils;

import java.util.Collection;
import java.util.Map;

/**
 * 空值判断工具类
 */
public class EmptyUtil {

    /**
     * 判断对象是否为空
     * @param obj 对象
     * @return true:为空 false:非空
     */
    public static boolean isEmpty(Object obj) {
        if (obj == null) {
            return true;
        }

        if (obj instanceof String) {
            return ((String) obj).trim().isEmpty();
        }

        if (obj instanceof Collection) {
            return ((Collection<?>) obj).isEmpty();
        }

        if (obj instanceof Map) {
            return ((Map<?, ?>) obj).isEmpty();
        }

        if (obj.getClass().isArray()) {
            return ((Object[]) obj).length == 0;
        }

        return false;
    }

    /**
     * 判断对象是否非空
     * @param obj 对象
     * @return true:非空 false:为空
     */
    public static boolean isNotEmpty(Object obj) {
        return !isEmpty(obj);
    }

    /**
     * 判断字符串是否为空或空白
     * @param str 字符串
     * @return true:为空或空白 false:非空
     */
    public static boolean isBlank(String str) {
        return str == null || str.trim().isEmpty();
    }

    /**
     * 判断字符串是否非空且非空白
     * @param str 字符串
     * @return true:非空且非空白 false:为空或空白
     */
    public static boolean isNotBlank(String str) {
        return !isBlank(str);
    }

    /**
     * 判断集合是否为空
     * @param collection 集合
     * @return true:为空 false:非空
     */
    public static boolean isEmpty(Collection<?> collection) {
        return collection == null || collection.isEmpty();
    }

    /**
     * 判断集合是否非空
     * @param collection 集合
     * @return true:非空 false:为空
     */
    public static boolean isNotEmpty(Collection<?> collection) {
        return !isEmpty(collection);
    }

    /**
     * 判断Map是否为空
     * @param map Map
     * @return true:为空 false:非空
     */
    public static boolean isEmpty(Map<?, ?> map) {
        return map == null || map.isEmpty();
    }

    /**
     * 判断Map是否非空
     * @param map Map
     * @return true:非空 false:为空
     */
    public static boolean isNotEmpty(Map<?, ?> map) {
        return !isEmpty(map);
    }

    /**
     * 判断数组是否为空
     * @param array 数组
     * @return true:为空 false:非空
     */
    public static boolean isEmpty(Object[] array) {
        return array == null || array.length == 0;
    }

    /**
     * 判断数组是否非空
     * @param array 数组
     * @return true:非空 false:为空
     */
    public static boolean isNotEmpty(Object[] array) {
        return !isEmpty(array);
    }
}